package com.haha.qqchannelbot.core.entity;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;


/**
 * 回复消息载荷
 * <p>
 * content, embed, ark, image/file_image, markdown 至少需要有一个字段，否则无法下发消息。
 *
 * <p>
 * <a href="https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/post_messages.html">发送消息</a>
 */
@Getter
@Setter
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReplyMessage {

    /**
     * 选填，消息内容，文本内容，支持
     * <a href="https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/message_format.html">内嵌格式</a>
     */
    private String content;

    /**
     * 选填，embed 消息，一种特殊的 ark，详情参考
     * <a href="https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/type/embed.html">Embed消息</a>
     */
    private Object embed;

    /**
     * 选填，ark 消息，详情参考
     */
    private Object ark;

    /**
     * 选填，引用消息
     * <p>
     *  <a href="https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/template/model.html#messagereference">引用消息</a>
     */
    @JsonProperty("message_reference")
    private Object messageReference;

    /**
     * 选填，图片url地址，平台会转存该图片，用于下发图片消息
     */
    private String image;

    /**
     * 选填，要回复的消息id(Message.id), 在 AT_CREATE_MESSAGE 事件中获取。
     */
    @JsonProperty("msg_id")
    private String msgId;

    /**
     * 选填，要回复的事件id, 在各事件对象中获取。
     */
    @JsonProperty("event_id")
    private String eventId;

    /**
     * 选填，markdown 消息
     * <p>
     *     <a href="https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/type/markdown.html">Markdown消息</a>
     */
    private MarkdownMsg markdown;

    /**
     * multipart/form-data 专有参数
     * 选填，图片文件，用于下发图片消息
     * 图片文件。form-data 支持直接通过文件上传的方式发送图片
     */
    @JsonProperty("file_image")
    private FileData fileImage;

    /**
     * markdown 按钮
     */
    private KeyboardMsg keyboard;


}
